package com.pond.pond.mapper;

import com.pond.pond.domain.FishingTechniqueComment;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 钓技文章评论Mapper接口
 * 
 * @author pond
 * @date 2024-01-15
 */
public interface FishingTechniqueCommentMapper 
{
    /**
     * 查询钓技文章评论
     * 
     * @param id 钓技文章评论主键
     * @return 钓技文章评论
     */
    public FishingTechniqueComment selectFishingTechniqueCommentById(Long id);

    /**
     * 查询文章评论列表（包含用户信息和点赞状态）
     * 
     * @param techniqueId 文章ID
     * @param userId 当前用户ID
     * @return 评论列表
     */
    public List<FishingTechniqueComment> selectCommentsByTechniqueId(@Param("techniqueId") Long techniqueId, @Param("userId") Long userId);

    /**
     * 查询评论的回复列表
     * 
     * @param parentId 父评论ID
     * @param userId 当前用户ID
     * @return 回复列表
     */
    public List<FishingTechniqueComment> selectRepliesByParentId(@Param("parentId") Long parentId, @Param("userId") Long userId);

    /**
     * 新增钓技文章评论
     * 
     * @param fishingTechniqueComment 钓技文章评论
     * @return 结果
     */
    public int insertFishingTechniqueComment(FishingTechniqueComment fishingTechniqueComment);

    /**
     * 修改钓技文章评论
     * 
     * @param fishingTechniqueComment 钓技文章评论
     * @return 结果
     */
    public int updateFishingTechniqueComment(FishingTechniqueComment fishingTechniqueComment);

    /**
     * 删除钓技文章评论
     * 
     * @param id 钓技文章评论主键
     * @return 结果
     */
    public int deleteFishingTechniqueCommentById(Long id);

    /**
     * 增加评论点赞数
     * 
     * @param id 评论ID
     * @return 结果
     */
    public int incrementLikeCount(Long id);

    /**
     * 减少评论点赞数
     * 
     * @param id 评论ID
     * @return 结果
     */
    public int decrementLikeCount(Long id);

    /**
     * 查询钓技文章评论列表（后台管理用）
     * 
     * @param fishingTechniqueComment 钓技文章评论
     * @return 钓技文章评论集合
     */
    public List<FishingTechniqueComment> selectFishingTechniqueCommentListForAdmin(FishingTechniqueComment fishingTechniqueComment);

    /**
     * 批量删除钓技文章评论
     * 
     * @param ids 需要删除的钓技文章评论主键集合
     * @return 结果
     */
    public int deleteFishingTechniqueCommentByIds(Long[] ids);

    /**
     * 获取评论统计数据
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 评论统计
     */
    public List<Map<String, Object>> selectCommentStats(@Param("startDate") String startDate, @Param("endDate") String endDate);
}